import pickle

import base64

from django_redis import get_redis_connection


def merge_cart_cookie_to_redis(request, user, response):
    """
    合並請求購物車數據，將未登錄保存cookie保存的redis中
    遇到cookie 和redis中數據相同的商品以coookie的數量爲主，覆蓋redis數據

    :param request:本次登陸成功後的請求對象【用於獲取cookie】
    :param user:本次登陸的用戶，用於獲取redis中的數據
    :param response:本次登陸陳功後響應對象【用於設置cookie】
    :return:響應對象，因爲我們函數內部操作了cookie需要返回客戶端

    """

    # 獲取購物車cookie
    cookie_cart = request.COOKIES.get("cart")

    # 如果數據爲空直接返回response
    if cookie_cart is None:
        return response

    # 解析cookie數據

    """
    {
        id{sku_id:count,selected:True},
        id{sku_id:count,selected:True}
    }
    """
    cookie_cart = pickle.loads(base64.b64decode(cookie_cart.encode()))

    redis_conn = get_redis_connection("cart")

    p1 = redis_conn.pipeline()

    # 直接便利cookie_cart ，把同樣sku_id 設置到redis數據中區

    for sku_id, sku_dict in cookie_cart.items():
        # 覆蓋redis中的sku_id
        # hset 設置 sku_id 指定的鍵中對應的下標值

        p1.hest("cart_%s" % user.id, sku_id, int(sku_dict["selected"]))

        if sku_dict["selected"]:
            p1.sadd("crat_selected_%s" % user.id, sku_id)

        else:
            p1.srem("crat_selected_%s" % user.id, sku_id)

    p1.execute()


    #便利完成之後刪除cookie

    response.delete_cookie("cart")

    return response
